/* 
将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
a)Adapter模式主要应用于“希望复用一些现存的类，但是接口又与复用环境要求不一致的情况” ，在遗留代码复用、类库迁移等方面非常有用。
b)GoF 23 定义了两种Adapter模式的实现结构：对象适配器和类适配器。但类适配器采用“多继承”的实现方式，带来了不良的高耦合，所以一般不推荐使用。对象适配器采用“对象组合”的方式，更符合松耦合精神。
c)Adapter模式可以实现的非常灵活，不必拘泥于Gof23中定义的两种结构。例如，完全可以将Adapter模式中的“现存对象”作为新的接口方法参数，来达到适配的目的。
Adapter模式本身要求我们尽可能地使用“面向接口的编程”风格，这样才能在后期很方便地适配

一般使用：
  1、希望对象有特定的方法
  2、函数的多参传入
  3、服务器返回数据的适配（将后台数据转化成我们需要的），这个经常使用

*/
class Stack {
  constructor() {
    this.array = []
  }
  push(item) {
    this.array.push(item)
  }

  pop() {
    return this.array.pop()
  }

  peek() {
    return this.array[this.array.length - 1]
  }
}

var s = new Stack()
s.push(1);
s.push(2);
console.log(s.pop(), s)
console.log(s.peek())